home *** CD-ROM | disk | FTP | other *** search
/ Amiga Collections: Taifun / Taifun 009 (1987-02-15)(Ossowski, Stefan)(DE)(PD).zip / Taifun 009 (1987-02-15)(Ossowski, Stefan)(DE)(PD).adf / HackIconII_Source / CopyIcon.c next >
C/C++ Source or Header  |  1987-03-04  |  4KB  |  147 lines

  1. /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\
  2. * |_o_o|\\ Copyright (c) 1987 The Software Distillery.  All Rights Reserved *
  3. * |. o.| ||          Written by Doug Walker                                 *
  4. * | .  | ||          The Software Distillery                                *
  5. * | o  | ||          235 Trillingham Lane                                   *
  6. * |  . |//           Cary, NC 27511                                         *
  7. * ======             BBS:(919)-471-6436                                     *
  8. \* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
  9.  
  10. #include "mydebug.h"
  11.  
  12. #include "exec/types.h"
  13. #include "exec/memory.h"
  14. #include "intuition/intuition.h"
  15. #include "graphics/gfxbase.h"
  16. #include "stdio.h"
  17.  
  18. #include "hackicon.h"
  19.  
  20. #define COPY_FROM 0
  21. #define COPY_TO   1
  22. #define COPY_DONE 2
  23.  
  24. extern struct Menu Titles[], CopyTitles[];
  25.  
  26. extern struct Screen   *Screen;
  27. extern struct Window   *Window;
  28. extern struct ViewPort *ViewPort;
  29.  
  30. extern struct iconfont *fonts[2];
  31. extern int fontnum;
  32. extern USHORT colormap[];
  33.  
  34. CopyIcon(repeat)
  35. int repeat;
  36. {
  37.    struct IntuiMessage *imsg;
  38.    ULONG Class;
  39.    USHORT Code;
  40.    USHORT icondata[ILENGTH];
  41.    int MouseX, MouseY;
  42.    int state, which, i;
  43.    struct Image *curimage, *nextimage;
  44.  
  45.    NewPtr(Window, 1);
  46.    ClearMenuStrip(Window);
  47.    SetMenuStrip(Window, CopyTitles);
  48.  
  49.    state = COPY_FROM;
  50.    
  51.    while(state != COPY_DONE)
  52.    {
  53.       if(!(imsg = (struct IntuiMessage *)GetMsg(Window->UserPort)))
  54.       {
  55.          WaitPort(Window->UserPort);
  56.          continue;
  57.       }
  58.       Class  = imsg->Class;
  59.       Code   = imsg->Code;
  60.       MouseX = imsg->MouseX;
  61.       MouseY = imsg->MouseY;
  62.       ReplyMsg(imsg);
  63.  
  64.       switch(Class)
  65.       {
  66.          case MOUSEBUTTONS:
  67.             BUG(5, ("main: case MOUSEBUTTONS\n"))
  68.             if(Code == SELECTDOWN)
  69.                which = WhichIcon(MouseX, MouseY);
  70.             else if(which >= 0 && fonts[fontnum] &&
  71.                     which == WhichIcon(MouseX, MouseY))
  72.             {
  73.                if(state == COPY_FROM)
  74.                {
  75. BUG(5, ("Copy FROM # %d\n", which))
  76.                   movmem((char *)(fonts[fontnum]->idata+(which*ILENGTH)),
  77.                          (char *)icondata,
  78.                          ILENGTH*sizeof(USHORT));
  79.                   state = COPY_TO;
  80.                   NewPtr(Window, 0);
  81.                }
  82.                else
  83.                {
  84. BUG(5, ("Copy TO # %d\n", which))
  85.                   fonts[fontnum]->flags |= CHANGED;
  86.                   if(fonts[fontnum]->firstchar > which) 
  87.                      fonts[fontnum]->firstchar = which;
  88.                   if(fonts[fontnum]->lastchar  < which) 
  89.                      fonts[fontnum]->lastchar  = which;
  90.                   movmem((char *)icondata,
  91.                          (char *)(fonts[fontnum]->idata+(which*ILENGTH)),
  92.                          ILENGTH*sizeof(USHORT));
  93.                   curimage = fonts[fontnum]->images + which;
  94.                   nextimage = curimage->NextImage;
  95.                   curimage->NextImage = (struct Image *)NULL;
  96.                   DrawImage(Window->RPort, curimage, 0, 0);
  97.                   curimage->NextImage = nextimage;
  98.                   if(repeat)
  99.                   {
  100.                      state = COPY_FROM;
  101.                      NewPtr(Window, 1);
  102.                   }
  103.                   else
  104.                      state = COPY_DONE;
  105.            }
  106.             }
  107.             break;
  108.  
  109.          case MENUPICK:
  110.             BUG(5, ("Copy: case MENUPICK\n"))
  111.             if(Code == MENUNULL) break;
  112.  
  113.             BUG(8, ("Copy: menunum = %d\n", MENUNUM(Code)))
  114.             if((i = MENUNUM(Code)) > 0)
  115.             {
  116.                AboutHackicon();
  117.                break;
  118.             }
  119.  
  120.             BUG(8, ("Copy: itemnum = %d\n", ITEMNUM(Code)))
  121.             i = ITEMNUM(Code);
  122.             switch(i)
  123.             {
  124.                case MC_ALTFONT:
  125.                   SetFont();
  126.                   break;
  127.                   
  128.                case MC_CANCEL:
  129.                   state = COPY_DONE;
  130.                   break;
  131.  
  132.                default:
  133.                   break;
  134.             }
  135.             break;
  136.  
  137.          default:
  138.             break;
  139.       }
  140.    }
  141.  
  142.    ClearPointer(Window);
  143.    ClearMenuStrip(Window);
  144.    SetMenuStrip(Window, Titles);
  145.    return(0);
  146. }
  147.